chapter 6
SRAM 将每个位存储在一个双稳态的(bistable)存储器单元里。每个单元是用一个六晶体管电路来实现的。这个电路有这样一个属性,它可以无限期地保持在两个不同的电压配置(configuration)或状态(state)之一。
由于 SRAM 存储器单元的双稳态特性,只要有电 ,它就会永远地保持它的值。即使有干扰(例如电子噪音)来扰乱电压,当干扰消除时,电路就会恢复到稳定值。
与 SRAM 不同,DRAM 存储器单元对干扰非常敏感。当电容的电压被扰乱之后,它就永远不会恢复了
闪存(flash memory)是一类非易失性存储器,基于 EEPROMÿ 它已经成为了一种重要的存储技术。
数据流通过称为总线(bus)的共享电子电路在处理器和 DRAM 主存之间来来回回。每次 CPU 和主存之间的数据传送都是通过一系列步骤来完成的,这些步骤称为总线事务 (bus transaction)。读事务(read transaction)从主存传送数据到 CPUÿ 写事务(write transaction)从 CPU 传送数据到主存。
每个表面是由一组称为磁道(track)的同心圆组成的。每个磁道被划分为一组扇区(sector)。每个扇区包含相等数量的数据位(通常是 512 字节), 这些数据编码在扇区上的磁性材料中。扇区之间由一些间隙(gap)分隔开, 这些间隙中不存储数据位。间隙存储用来标识扇区的格式化位。
当操作系统想要执行一个 I/O 操作时,例如读一个磁盘扇区的数据到主存,操作系统会发送—个命令到磁盘控制器,让它读某个逻辑块号。控制器上的固件执行一个快速表査找,将一个逻辑块号翻译成一个(盘面,磁道,扇区)的三元组,这个三元组唯一地标识了对应的物理扇区。
系统总线和内存总线是与 CPU 相关的,与它们不同,诸如 PCI 这样的 1/ 〇总线设计成与底层 CPU 无关。
注意,读 SSD 比写要快。随机读和写的性能差别是由底层闪存基本属性决定的。
不同的存储技术有不同的价格和性能折中。SRAM 比 DRAM 快一点,而 DRAM 比磁盘要快很多。另一方面,快速存储总是比慢速存储要贵的。SRAM 每字节的造价比 DRAM 高,DRAM 的造价又比磁盘高得多。SSD 位于 DRAM 和旋转磁盘之间。
无疑,仍在使用的储存方式中,访问越快的单位造价越贵(否则其他的储存方式基本不用考虑了);而在 6.1 中,我们大致了解了在计算机中读/写储存的方式,了解了 Disk driver & SSD 的结构。
局部性(locality)。也就是 ,它们倾向于引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。这种倾向性 ,被称为局部性原理(principle of locality).*
步长为 1 的引用模式 (stride-1 reference pattern)(相对于元素的大小)。有时我们称步长为 1 的引用模式为顺序引用模式(sequential reference pattern)ÿ
数据总是以块大小为传送单元(transfer unit)在第々层和第;1 +1 层之间来回复制的。虽然在层次结构中任何一对相邻的层次之间块大小是固定的,但是其他的层次对之间可以有不同的块大小。
当程序需要第々+1 层的某个数据对象 d 时,它首先在当前存储在第々层的一个块中査找夂如果 d 刚好缓存在第 6 层中,那么就是我们所说的缓存命中(cache hit)
缓存不命中 (cache miss), 当发生缓存不命中时 ,'第 * 层的缓存从第 4+1 层缓存中取出包含 2 的那个块,如果第々层的缓存已经满了�可能就会覆盖现存的一个块。
一个空的缓存有时被称为冷缓存(cold cache), 此类本命中称为强制性不命中(compulsory miss)或冷不命中(cold miss)ÿ 冷不命中很重要,因为它们通常是短暂的事件,不会在反复访问存储器使得缓存暖身(wanned up)之后的稳定状态中出现。
硬件缓存通常使用的是更严格的放置策略,这个策略将第 A + 1 层的某个块限制放置在第々层块的一个小的子集中(有时只是一个块)
类似于哈希表?
组索引位被解释为一个无符号整数 ,它告诉我们这个字必须存储在哪个组中。一旦我们知道了这个字必须放在哪个组中,A 中的《个标记位就告诉我们这个组中的哪一行包含这个字(如果有的话 h 当且仅当设置了有效位并且该行的标记位与地址 A 中的标记位相匹配时,组中的这一行才包含这个字。一旦我们在由组索引标识的组中定位了由标号所标识的行,那么 6 个块偏移位给出了在 B 个字节的数据块中的字偏移。
缓存确定一个请求是否命中,然后抽取出被请求的字的过程 .分为三步:1) 组选择;2) 行匹配;3) 字抽取。
写回(write-back), 尽可能地推迟更新,只有当替换算法要驱逐这个更新过的块时,才把它写到紧接着的低一层中。由于局部性 ,写回能显著地减少总线流量 ,但是它的缺点是增加了复杂性。高速缓存必须为每个高速缓存行维护一个额外的修改位(dirty bit)ÿ 表明这个高速缓存块是否被修改过。
如果我们反复以不同的 size 和 stride 值调用们就能得到一个读带宽的时间和空间局部性的二维函数,称为存储器山(memory tain)